/**
 * https://leetcode-cn.com/problems/spiral-matrix-ii/
 * 螺旋矩阵II
 * 给你一个正整数 n ，生成一个包含 1 到 n2 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
 * @param n
 * @returns
 */
const generateMatrix = (n: number): number[][] => {
  let number = 1;

  // 螺旋矩阵
  const matrix: number[][] = new Array(n)
    .fill(0)
    .map((_) => new Array(n).fill(0));

  let top = 0,
    bottom = n - 1,
    left = 0,
    right = n - 1;

  while (left <= right && top <= bottom) {
    // 排列上面行
    for (let i = left; i <= right; i++) {
      matrix[top][i] = number++;
    }

    // 排列右边列
    for (let i = top + 1; i <= bottom; i++) {
      matrix[i][right] = number++;
    }

    // 还没有到边界
    if (left < right && top < bottom) {
      // 排列下面的行
      for (let i = right - 1; i >= left; i--) {
        matrix[bottom][i] = number++;
      }

      // 排列左边的列
      for (let i = bottom - 1; i > top; i--) {
        matrix[i][left] = number++;
      }
    }

    //修改边界
    left++;
    right--;
    bottom--;
    top++;
  }

  return matrix;
};

console.log(generateMatrix(3));

// [ 1, 2, 3 ]
// [ 0, 6, 4 ]
// [ 0, 0, 5 ] 
